package lc.位运算;

/**
 * @description:
 * @author: qian
 * @createDate: 2021/10/18
 */
public class Math476_数字的补数 {

    // 只要一个数的二进制和一个和他一样位数的二进制1，^就可以取反了
    public int findComplement(int num) {
        // num = 5 | 101
        int mask = 1 << 30;

        while ((num & mask) == 0) mask >>= 1; // mask 100

        mask = (mask << 1) - 1; // mask 1000 - 1 = 111

        return num ^= mask;
    }
}
